/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.deployment.manager;

import br.com.deployment.entidade.fermojupi.AtoCampo;
import br.com.deployment.entidade.fermojupi.AtoItem;
import br.com.deployment.entidade.fermojupi.AtoTipo;
import br.com.deployment.entidade.selo.TipoSelo;
import br.com.deployment.message.Msg;
import br.com.deployment.servico.AtoCampoServico;
import br.com.deployment.servico.AtoItemServico;
import br.com.deployment.servico.AtoTipoServico;
import br.com.deployment.servico.TipoSeloServico;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import org.primefaces.event.SelectEvent;
import org.primefaces.model.DualListModel;

/**
 *
 * @author elyjr
 */
@ManagedBean
@SessionScoped
public class ManagerAto implements Serializable{

    @EJB
    AtoItemServico atoItemServico;
    @EJB
    AtoTipoServico atoTipoServico;
    @EJB
    TipoSeloServico tipoSeloServico;
    @EJB
    AtoCampoServico atoCampoServico;
    
    private TipoSelo tipoSelo;
    private AtoItem atoItem;
    private List<AtoItem> listAtoItem;
    private DualListModel<AtoCampo> dualAtoCampo;
    private List<AtoCampo> atoCamposEsq;
    private List<AtoCampo> atoCampoDir;

    public ManagerAto() {
        System.out.println("Reiniciou");
    }

    @PostConstruct
    public void init() {
        atoItem = new AtoItem();
        listAtoItem = new ArrayList<AtoItem>();
        tipoSelo = new TipoSelo();
       // atoCamposEsq = new ArrayList<AtoCampo>();
        atoCamposEsq = atoCampoServico.atoCampos();
        atoCampoDir = new ArrayList<AtoCampo>();
        dualAtoCampo = new DualListModel<AtoCampo>(atoCamposEsq, atoCampoDir);
    }

    public List<AtoCampo> getAtoCampoDir() {
        return atoCampoDir;
    }

    public void setAtoCampoDir(List<AtoCampo> atoCampoDir) {
        this.atoCampoDir = atoCampoDir;
    }

    public List<AtoCampo> getAtoCamposEsq() {
        //atoCamposEsq = atoCampoServico.atoCampos();
        return atoCamposEsq;
    }

    public void setAtoCamposEsq(List<AtoCampo> atoCamposEsq) {
        this.atoCamposEsq = atoCamposEsq;
    }

    public DualListModel<AtoCampo> getDualAtoCampo() {
        return dualAtoCampo;
    }

    public void setDualAtoCampo(DualListModel<AtoCampo> dualAtoCampo) {
        this.dualAtoCampo = dualAtoCampo;
    }

    public void reinit() {
        atoItem = new AtoItem();
        tipoSelo = new TipoSelo();
        listAtoItem = new ArrayList<AtoItem>();
    }

    public List<AtoItem> completeAtoItem(String query) {
        List<AtoItem> bd = new ArrayList<AtoItem>();
        bd = atoItemServico.findAtoItem(query);
        return bd;
    }

    public void reinitAtoItem() {
        atoItem = new AtoItem();
        tipoSelo = new TipoSelo();
    }

    public void reinitListAtoItem() {
        listAtoItem = new ArrayList<AtoItem>();
    }

    public void reinitAll() {
        atoItem = new AtoItem();

        tipoSelo = new TipoSelo();

    }

    public AtoItem getAtoItem() {
        return atoItem;
    }

    public void setAtoItem(AtoItem atoItem) {
        this.atoItem = atoItem;
    }

    public List<AtoItem> getListAtoItem() {
        return listAtoItem;
    }

    public void setListAtoItem(List<AtoItem> listAtoItem) {
        this.listAtoItem = listAtoItem;
    }

    public TipoSelo getTipoSelo() {
        return tipoSelo;
    }

    public void setTipoSelo(TipoSelo tipoSelo) {
        this.tipoSelo = tipoSelo;
    }

    public void remove() {
        FacesContext context = FacesContext.getCurrentInstance();
        Map map = context.getExternalContext().getRequestParameterMap();
        String x = (String) map.get("param");
        int ds = Integer.parseInt(x);
        listAtoItem.remove(ds);
    }

    public void editList() {
        FacesContext context = FacesContext.getCurrentInstance();
        Map map = context.getExternalContext().getRequestParameterMap();
        String x = (String) map.get("param");
        int ds = Integer.parseInt(x);
        atoItem = listAtoItem.get(ds);
        
        dualAtoCampo.setTarget(atoItem.getAtoCampos());
        System.out.println(atoItem.getAtoCampos());
       
        listAtoItem.remove(ds);
    }

    public void addList() {
        atoItem.setAtoTipo(atoTipoServico.find(atoItem.getAtoTipo().getId()));
        
        if(atoItem.getTipoSelo() != null){
            atoItem.setTipoSelo(tipoSeloServico.find(atoItem.getTipoSelo().getId()));
        }
        
        //dualAtoCampo.setTarget(atoCampoDir);
        atoCampoDir = dualAtoCampo.getTarget(); 
        atoItem.setAtoCampos(atoCampoDir);
        listAtoItem.add(atoItem);
        atoItem = new AtoItem();
        dualAtoCampo.getTarget().removeAll(atoCampoDir);
        atoCamposEsq = atoCampoServico.atoCampos();
        dualAtoCampo.setSource(atoCamposEsq); 
    }

    public void alterar(AtoItem atoItem) {
        this.atoItem = atoItem;
        reinitAtoItem();

    }

    public void remover(AtoItem atoItem) {
        this.atoItem = atoItem;
        System.err.println("o objeto do Parametro - " + atoItem);

        System.err.println("o objeto AtoItem - " + this.atoItem);
        System.err.println("list antes  - " + listAtoItem.toString());

        listAtoItem.remove(this.atoItem);
        System.err.println("list depois - " + listAtoItem.toString());

    }

    public void handleSelect(SelectEvent event) {
        AtoTipo a = (AtoTipo) event.getObject();
        atoItem.setAtoTipo(atoTipoServico.find(a.getId()));
    }

    public void handleSelectTipoSelo(SelectEvent event) {
        tipoSelo = (TipoSelo) event.getObject();
        //atoItem.setTipoSelo(tipoSelo);
        atoItem.setTipoSelo(tipoSeloServico.find(tipoSelo.getId()));
    }

    public void limpaList() {
        atoItem = new AtoItem();
        tipoSelo = new TipoSelo();
    }

    public void salvar() {

        for (AtoItem atoItem1 : listAtoItem) {
            atoItemServico.salvar(atoItem1);
    }
        reinit();
        Msg.messagemInfo("Ato Salvo Com Sucesso !");
    }

    public void redirect(String string) {
        try {
            FacesContext context = FacesContext.getCurrentInstance();
            atoItem = new AtoItem();
            context.getExternalContext().redirect(string);
        } catch (IOException ex) {
            Logger.getLogger(ManagerAto.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
